package org.jaaksi.commondemo.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Picture;
import android.graphics.RectF;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;

/**
 * 创建时间：2017年02月14日18:03 <br>
 * 作者：fuchaoyang <br>
 * 描述：
 */

public class DrawView extends View {
  Paint mPaint;
  TextPaint mTextPaint;

  public DrawView(Context context) {
    super(context);
  }

  public DrawView(Context context, AttributeSet attrs) {
    super(context, attrs);

    mPaint = new Paint();
    mPaint.setColor(Color.BLACK);
    mPaint.setStrokeWidth(5);
    mPaint.setStyle(Paint.Style.STROKE);

    mTextPaint = new TextPaint();
    mTextPaint.setColor(Color.BLUE);
    mTextPaint.setTextSize(60);

    recording();
  }

  // 1.创建Picture
  private Picture mPicture = new Picture();

  /**
   * 录制内容，即将一些Canvas操作用Picture存储起来，录制的内容是不会直接显示在屏幕上的，只是存储起来了而已。
   * 使用的时候需要绘制出来
   */
  // 2.录制内容方法
  private void recording() {
    // 开始录制 (接收返回值Canvas)
    Canvas canvas = mPicture.beginRecording(500, 500);
    // 创建一个画笔
    Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    paint.setStyle(Paint.Style.FILL);

    // 在Canvas中具体操作
    // 位移
    canvas.translate(250, 250);
    // 绘制一个圆
    canvas.drawCircle(0, 0, 100, paint);

    mPicture.endRecording();
  }

  @Override protected void onDraw(Canvas canvas) {
    //// 画布的操作是不可逆的，而且很多画布操作会影响后续的步骤,所以会对画布的一些状态进行保存和回滚。
    //// 把当前的画布的状态进行保存，然后放入特定的栈中
    //canvas.save();
    //canvas.translate(200, 200);
    //canvas.drawCircle(0, 0, 100, mPaint);
    //
    //// 在坐标原点绘制一个蓝色圆形
    //mPaint.setColor(Color.BLUE);
    //canvas.translate(200, 200);
    //canvas.scale(1.5f, 1f);
    //canvas.drawText("绘制一个什么呢", 0, 0, mTextPaint);
    //
    //// 把栈中最顶层的画布状态取出来，并按照这个状态恢复当前的画布
    //canvas.restore();
    //
    //canvas.translate(getWidth() / 2, getHeight() / 2);
    //Rect rect = new Rect(0, -400, 400, 0);
    //canvas.drawRect(rect, mPaint);
    //
    //canvas.rotate(30);
    //canvas.drawRect(rect, mPaint);
    //
    ////canvas.scale(-0.5f, -0.5f, 200, 0);
    ////canvas.drawRect(rect, mPaint);

    // 使用canvas.drawPicture绘制完成后不会影响Canvas的状态(Matrix clip等)，而Picture.draw(canvas)会影响Canvas状态
    //canvas.drawPicture(mPicture);
    canvas.drawPicture(mPicture, new RectF(0, 0, 200, 200));
  }
}
